<template>
    <div class="register-container">
        <!-- 注册内容 -->
        <div class="register">
            <h3>
                注册新用户
                <span class="go">
                    我有账号，去
                    <a href="login.html" target="_blank">登陆</a>
                </span>
            </h3>
            <ValidationObserver v-slot="{ handleSubmit }">
                <form @submit.prevent="handleSubmit(onSubmit)">
                    <ValidationProvider
                        class="content"
                        rules="phoneRequired|phoneNumReg"
                        v-slot="{ errors }"
                        mode="lazy"
                        tag="div"
                    >
                        <label>手机号:</label>
                        <input type="text" v-model="user.phone" placeholder="请输入你的手机号" />
                        <span class="error-msg">{{ errors[0] }}</span>
                    </ValidationProvider>
                    <ValidationProvider
                        class="content"
                        tag="div"
                        rules="codeRequired|digits:6"
                        mode="lazy"
                        v-slot="{ errors }"
                    >
                        <label>验证码:</label>
                        <input type="text" v-model="user.code" placeholder="请输入验证码" />
                        <input
                            type="button"
                            style="width: 120px"
                            value="获取验证码"
                            @click="getCode"
                        />
                        <span class="error-msg">{{ errors[0] }}</span>
                    </ValidationProvider>
                    <ValidationProvider
                        class="content"
                        tag="div"
                        rules="passwordRequired|password"
                        v-slot="{ errors }"
                        mode="lazy"
                    >
                        <label>登录密码:</label>
                        <input
                            type="text"
                            v-model="user.password"
                            placeholder="请输入你的登录密码"
                        />
                        <span class="error-msg">{{ errors[0] }}</span>
                    </ValidationProvider>
                    <ValidationProvider
                        class="content"
                        tag="div"
                        mode="lazy"
                        :rules="`passwordRequired|password|rePassNumber:${user.password}`"
                        v-slot="{ errors }"
                    >
                        <label>确认密码:</label>
                        <input type="text" v-model="user.rePassword" placeholder="请输入确认密码" />
                        <span class="error-msg">{{ errors[0] }}</span>
                    </ValidationProvider>
                    <ValidationProvider
                        class="controls"
                        tag="div"
                        v-slot="{ errors }"
                        rules="agree"
                    >
                        <input name="m1" v-model="user.isAgree" type="checkbox" />
                        <span>同意协议并注册《尚品汇用户协议》</span>
                        <span class="error-msg">{{ errors[0] }}</span>
                    </ValidationProvider>
                    <div class="btn">
                        <button>完成注册</button>
                    </div>
                </form>
            </ValidationObserver>
        </div>

        <!-- 底部 -->
        <div class="copyright">
            <ul>
                <li>关于我们</li>
                <li>联系我们</li>
                <li>联系客服</li>
                <li>商家入驻</li>
                <li>营销中心</li>
                <li>手机尚品汇</li>
                <li>销售联盟</li>
                <li>尚品汇社区</li>
            </ul>
            <div class="address">地址：北京市昌平区宏福科技园综合楼6层</div>
            <div class="beian">京ICP备19006430号</div>
        </div>
    </div>
</template>

<script>
import { ValidationObserver, ValidationProvider } from 'vee-validate'; //验证插件
import { extend } from 'vee-validate';
import { required, digits } from 'vee-validate/dist/rules';
import { phoneNumReg, passwordReg } from '../../utils/reg';
import { reqCode, reqUserRegister } from '../../api/index';

//手机号校验
extend('phoneRequired', {
    ...required,
    message: '手机号码不能为空',
});
extend('phoneNumReg', {
    validate(value) {
        return phoneNumReg.test(value);
    },
    message: '手机号码不正确',
});
//密码验证
extend('passwordRequired', {
    ...required,
    message: '密码不能为空',
});
extend('password', {
    validate(value) {
        return passwordReg.test(value);
    },
    message: '密码格式不正确',
});
//确认密码
extend('rePassNumber', {
    validate(value, { password }) {
        return value === password;
    },
    message: '密码不正确',
    params: ['password'],
});
//勾选同意协议
extend('agree', {
    validate(value) {
        return value;
    },
    message: '想要注册，必须勾选！',
});
//验证码
extend('codeRequired', {
    ...required,
    message: '验证码不能为空',
});
extend('digits', {
    ...digits,
    message: '验证码格式不正确',
});
export default {
    name: 'Register',
    data() {
        return {
            user: {
                phone: '',
                password: '',
                rePassword: '',
                code: '',
                isAgree: false, // 是否同意用户协议
            },
        };
    },
    components: {
        ValidationObserver,
        ValidationProvider,
    },
    methods: {
        async onSubmit() {
            //当表单中的所有的输入框都经过了校验，才会执行这里面的代码
            const { phone, password, code } = this.user;
            const resule = await reqUserRegister({ phone, password, code });
            if (resule.code === 200) {
                this.$router.push('/login');
            } else {
                alert(resule.message);
            }
        },
        // handlerSubmit() {},
        // //获取验证码
        async getCode(e) {
            if (!phoneNumReg.test(this.user.phone)) return;
            //60秒内重新发送请求
            let num = 10;
            e.target.disablad = true;
            const timeId = setInterval(() => {
                num--;
                if (num <= 0) {
                    clearInterval(timeId);
                    e.target.value = '获取验证码';
                    e.target.disablad = false;
                    return;
                }
                e.target.value = num + '秒后重新发送验证码';
            }, 1000);

            const result = await reqCode(this.user.phone);
            if (result.code === 200) {
                this.user.code = result.data;
            } else {
                console.log(result.message);
            }
        },
    },
};
</script>

<style lang="less" scoped>
.register-container {
    .register {
        width: 1200px;
        height: 445px;
        border: 1px solid rgb(223, 223, 223);
        margin: 0 auto;

        h3 {
            background: #ececec;
            margin: 0;
            padding: 6px 15px;
            color: #333;
            border-bottom: 1px solid #dfdfdf;
            font-size: 20.04px;
            line-height: 30.06px;

            span {
                font-size: 14px;
                float: right;

                a {
                    color: #e1251b;
                }
            }
        }

        div:nth-of-type(1) {
            margin-top: 40px;
        }

        .content {
            padding-left: 390px;
            margin-bottom: 18px;
            position: relative;

            label {
                font-size: 14px;
                width: 96px;
                text-align: right;
                display: inline-block;
            }

            input {
                width: 270px;
                height: 38px;
                padding-left: 8px;
                box-sizing: border-box;
                margin-left: 5px;
                outline: none;
                border: 1px solid #999;
            }

            img {
                vertical-align: sub;
            }

            .error-msg {
                position: absolute;
                top: 100%;
                left: 495px;
                color: red;
            }
        }

        .controls {
            text-align: center;
            position: relative;

            input {
                vertical-align: middle;
            }

            .error-msg {
                position: absolute;
                top: 100%;
                left: 495px;
                color: red;
            }
        }

        .btn {
            text-align: center;
            line-height: 36px;
            margin: 17px 0 0 55px;

            button {
                outline: none;
                width: 270px;
                height: 36px;
                background: #e1251b;
                color: #fff !important;
                display: inline-block;
                font-size: 16px;
            }
        }
    }

    .copyright {
        width: 1200px;
        margin: 0 auto;
        text-align: center;
        line-height: 24px;

        ul {
            li {
                display: inline-block;
                border-right: 1px solid #e4e4e4;
                padding: 0 20px;
                margin: 15px 0;
            }
        }
    }
}
</style>
